package com.xbai.bean.factory;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @author jxbai
 * @desc 默认 {@link UserFactory} 实现
 * @date 2021/1/26
 */
public class DefaultUserFactory implements UserFactory, InitializingBean, DisposableBean {

    /**
     * 1.@PostConstruct 标注方法
     */
    @PostConstruct
    public void init() {
        System.out.println("@PostConstruct：UserFactory 初始化中...");
    }

    /**
     * 3.自定义初始化方法
     */
    public void initUserFactory() {
        System.out.println("自定义初始化方法 initUserFactory() : UserFactory 初始化中...");
    }

    /**
     * 2.实现 InitializingBean 接口的 afterPropertiesSet() 方法
     *
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitializingBean#afterPropertiesSet() : UserFactory 初始化中...");
    }

    /**
     * 1.@PreDestroy 标注方法（Java标准注解）
     */
    @PreDestroy
    public void preDestroy() {
        System.out.println("@PreDestroy : UserFactory 销毁中...");
    }

    /**
     * 2.实现 DisposableBean 接口的 destroy() 方法（Spring接口）
     * @throws Exception
     */
    @Override
    public void destroy() throws Exception {
        System.out.println("DisposableBean#destroy() : UserFactory 销毁中...");
    }

    /**
     * 3.自定义销毁方法: Java 注解：@Bean(destroy=”destroy”)
     */
    public void doDestroy() {
        System.out.println("自定义销毁方法 doDestroy() : UserFactory 销毁中...");
    }

    @Override
    protected void finalize() throws Throwable {
        System.out.println("当前 DefaultUserFactory 对象正在被垃圾回收...");
    }
}
